#pragma once

#ifndef __LIT__PREREQUISITES__INCLUDED__HH__
#define __LIT__PREREQUISITES__INCLUDED__HH__

#ifndef LIT_STANDALONE
#include <OgreHeaderPrefix.h>
#include <OgrePrerequisites.h>
#include <OgreVector2.h>
#include <OgreVector3.h>
#include <OgreVector4.h>
#include <OgreQuaternion.h>
#include <OgreColourValue.h>
#include <OgreAxisAlignedBox.h>
#include <OgreMatrix3.h>
#include <OgreMatrix4.h>
#include <OgreHeaderSuffix.h>
#endif

#include <LitPlatform.hpp>
#include <LitForward.hpp>

#include <LitVersion.hpp>
#include <LitPointer.hpp>
#include <LitTriplet.hpp>
#include <LitExceptions.h>

namespace Lit
{
#ifndef LIT_STANDALONE
	typedef Ogre::Vector2			Vec2;
	typedef Ogre::Vector3			Vec3;
	typedef Ogre::Vector4			Vec4;
	typedef Ogre::Quaternion		Quat;
	typedef Ogre::ColourValue		Colour;
	typedef Ogre::AxisAlignedBox	AABB;
	typedef Ogre::Matrix3			Mat3;
	typedef Ogre::Matrix4			Mat4;
	typedef Ogre::Real				Real;
	typedef Ogre::Sphere			Sphere;

	typedef Ogre::Camera			ogre_camera_t;
	typedef Ogre::Entity			ogre_getEntity_t;
	typedef Ogre::Mesh				ogre_mesh_t;
	typedef Ogre::Mesh				ogre_material_t;
	typedef Ogre::Light				ogre_light_t;
	typedef Ogre::Log				ogre_log_t;
	typedef Ogre::SceneNode			ogre_scene_node_t;
	typedef Ogre::ManualObject		ogre_manual_obj_t;
	typedef Ogre::SceneManager		ogre_scene_mgr_t;
	typedef Ogre::RenderWindow		ogre_window_t;
	typedef Ogre::Viewport			ogre_viewport_t;
	
	typedef RefPtr<ogre_camera_t>		OgreCameraPtr;
	typedef RefPtr<ogre_getEntity_t>	OgreEntityPtr;
	typedef RefPtr<ogre_viewport_t>		OgreViewportPtr;
	typedef RefPtr<ogre_light_t>		OgreLightPtr;
	typedef RefPtr<ogre_log_t>			OgreLogPtr;
	typedef Ogre::MeshPtr				OgreMeshPtr;
	typedef Ogre::MaterialPtr			OgreMaterialPtr;
	typedef RefPtr<ogre_manual_obj_t>	OgreManualObjPtr;
	typedef RefPtr<ogre_scene_mgr_t>	OgreSceneManagerPtr;
	typedef RefPtr<ogre_scene_node_t>	OgreSceneNodePtr;
	typedef RefPtr<ogre_window_t>		OgreRenderWindowPtr;
#endif
};

#endif